#!usr/bin/env python  
# -*- coding:utf-8 _*-
""" 
@author:robot
@file: demo.py 
@version:
@time: 2022/11/10 
"""
"""
有两个单文件超过4G的数据文件，文件内容为QQ号码，每行一个，不重复，按从小到大顺序排序好后输出到另一个文件中 
"""


class Solution:
    # 读取count数量的文件，并标记断点
    # 使用Lock来保证数据的冲突
    # 记录读取到的源文件信息到变量
    # 使用生产者消费的管道方式进行读写
    # 多线程进行并行
    def __init__(self):
        ...

    def read(self, file_path: str, count=200):
        ...

    def write(self, ):
        ...


# 给定一个数组candidates和一个目标数target，找出candidates中所有可以使数字和为target的组合。

# candidates 中的每个数字在每个组合中只能使用一次。

# 说明：

# 所有数字（包括目标数）都是正整数。
# 解集不能包含重复的组合。 

# 示例 1:

# 输入: candidates = [10,1,2,7,6,1,5], target = 8,
# 所求解集为:
# [
#   [1, 7],
#   [1, 2, 5],
#   [2, 6],
#   [1, 1, 6]
# ]

# 示例 2:

# 输入: candidates = [2,5,2,1,2], target = 5,
# 所求解集为:
# [
#   [1,2,2],
#   [5]
# ]

class Solution:
    def __init__(self):
        self.res = []
        self.res2 = []

    # def demo(self, candidates, target):
    #     res = []
    #     hash = dict()
    #     for i in range(len(candidates)):
    #       tmp = target - candidates[i]
    #       if tmp not in hash:
    #           hash[candidates[i]] = i
    #       else:
    #           res.append(hash[tmp] + 1)
    #           res.append(i+1)
    #         break
    #     return res

    def demo2(self, candidates, target):
        for i in range(len(candidates)):
            if candidates[i] <= target:
                self.res2.append(candidates[i])
            tmp = target - candidates[i]
            if tmp == 0:
                self.res.append(self.res2)
                self.res2 = []
            elif tmp > 0:
                self.demo2(candidates[i+1:], tmp)

        return self.res

T = Solution()
res = T.demo2([10, 1, 2, 7, 6, 1, 5], 8)
print(res)
